In recent years, there has been a tremendous growth in the use of computer products, i.e., products that contain a data processor, such as desktop and laptop computers, personal data assistants (PDAs), computerized mobile phones, and the like. The increased use of computer products has placed additional production demands on existing manufacturing and testing capabilities. The increased production demands, along with a longstanding interest to continually improve the quality of manufactured computer products, have intensified a continuing need to improve the efficiency of test procedures. As described below, the need for improved efficiency is especially acute for quality test procedures involving computer hardware devices, such as a keyboard, mouse, printer, modem, scanner, etc., and drivers for such devices.
Computing environments for testing hardware devices, hardware drivers, and software applications that communicate with hardware drivers introduce many drawbacks because hardware devices and device drivers must be physically connected to and/or installed in a computer product prior to the execution of the test procedures. Thus, conventional test methods include an inefficient, time-intensive step that requires a person to physically install or connect a hardware device and manually load one or more software drivers for the hardware device. Among many other disadvantages, testing methods involving the manual installation of software and hardware components often encounter problems caused by human error. Such test environments are further hampered by the cumbersome task of coordinating test procedures between many human testers assigned to simultaneously test large quantities of computer products at one time.
The aforementioned drawbacks are exacerbated by the fact that conventional test environments require a tester to manage large inventories of hardware devices. During the development of many software products, such as an operating system, it is desirable to test the software products with a range of hardware devices. Given the voluminous number of makes and models of each type of hardware device, testing tasks are further burdened by the fact that existing test methods require that a human tester manage the logistics of acquiring each hardware device and then perform tests on each make and model. Existing test procedures are further burdened by the fact that the tester is required to maintain complex logs of test results. These manual tasks introduce many additional problems caused by human error.
One way to improve the efficiency of test procedures is to automate test procedures to the extent possible. For example, some existing testing systems utilize a hard-coded device simulator, which enables a tester to simulate the functions of a hardware device without having to physically install a hardware device in a computer. Although some existing automation tools, such as a hard-coded device simulator, improve certain aspects of software test procedures, such automation tools present other drawbacks. One drawback of existing device simulators stems from the fact that they are hard-coded, requiring each device simulator to be redesigned and rebuilt each time the functional characteristics of the tested device are modified. Because of this drawback in most computing environments, hard-coded device simulators do not offer a flexible and cost-efficient hardware device testing solution.
In addition to hard-coded device simulators, other existing testing tools involve the use of scripts to automate certain aspects of computer product test procedures. Although scripts are useful in testing certain user-level applications, test scripts cannot be readily configured to communicate with hardware drivers because they cannot directly communicate with software components located in the kernel address space of an operating system. Thus, the prior art test automation scripts and programs normally used for applications that operate in a user address space of an operating system cannot be readily applied to tests involving hardware devices and device drivers.
As will be readily understood from the foregoing, a need exists for computerized test systems and methods that improve the testing of hardware devices, device drivers, and software applications that communicate with device drivers. More specifically, there is a need for automated systems and methods that provide a framework that utilizes a device simulator having a simplified structure. A need also exists for a system and method that allow user mode applications, such as computer test applications, to readily communicate with device drivers and driver simulators.